package parts
{
	import elements.ProgressBar;
	import events.LoaderEvent;
	import flash.display.DisplayObject;
	import flash.display.Sprite;
	import gs.TweenLite;
	import model.ApplicationModel;
	import parts.PartBase;
	import styles.ProgressBarStyle;
	import util.Bounds;
	import util.site.PartCodes;
	
	/**
	 * 
	 * @author kasoi
	 */
	public class LoaderPart extends PartBase
	{
		
		////////////////////////////////////////////////////////////////////
		// Public properties
		////////////////////////////////////////////////////////////////////
		
		////////////////////////////////////////////////////////////////////
		// Private properties
		////////////////////////////////////////////////////////////////////
		
		private var progressBar: ProgressBar;
		
		////////////////////////////////////////////////////////////////////
		// Public methods
		////////////////////////////////////////////////////////////////////
		
		public function LoaderPart() 
		{
			this._code = PartCodes.LOADER;
			
			var style: ProgressBarStyle = new ProgressBarStyle();
			style.backgroundColor = 0xdfdfdf;
			style.progressBarColor = 0xd0d0d0;
			this.progressBar = new ProgressBar(new Bounds(300, 2), style);
			
			this.addChild(this.progressBar);
			
			Lib.init();
			Lib.instance.loadLibraries();
			Lib.instance.addEventListener(LoaderEvent.PROGRESS, this.lib_onProgress);
			Lib.instance.addEventListener(LoaderEvent.LOAD_COMPLETE, this.lib_onComplete);
			
			var img: DisplayObject = Lib.prelib_test_item;
			addChild(img);
			
			img.x = StageManager.stageWidth / 2 - img.width / 2;
			img.y = StageManager.stageHeight / 2 - img.height / 2;
		}
		
		override public function resize() : void 
		{
			var w: Number = StageManager.stageWidth;
			var h: Number = StageManager.stageHeight;
			
			this.progressBar.x = (w - this.progressBar.width) / 2;
			this.progressBar.y = (h - this.progressBar.height) / 2;
		}
		
		////////////////////////////////////////////////////////////////////
		// Private methods
		////////////////////////////////////////////////////////////////////
		
		private function openMainPart() : void 
		{
			var mod: ApplicationModel = ApplicationModel.getInstance();
			mod.openPart(PartCodes.MAIN);
		}
		
		////////////////////////////////////////////////////////////////////
		// Listeners
		////////////////////////////////////////////////////////////////////
		
		private function lib_onProgress(e: LoaderEvent) : void 
		{
			this.progressBar.progress = e.progress;
		}
		
		private function lib_onComplete(e: LoaderEvent) : void 
		{
			TweenLite.to(this, 0.1, { onComplete: this.openMainPart } );
		}
		
	}
	
}